package dialog;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JToolBar;

import window.CollieModelPanel;
import window.ColliePropertyPanel;
import component.DataPanel;
import component.ModelAtributPanel;
import diagram.NodeElement;

public class AtributeDialog extends JDialog {

	private DataPanel dataPanel;
	private NodeElement nodElement;
	private ModelAtributPanel modelAtributePanel;
	
	public AtributeDialog(Frame owner, NodeElement nodeElement) {
		super(owner, "Edit Instance", true);
		// on instancie les contenues de Name et Class
		setSize(200, 200);
		JPanel contentPane = new JPanel(new BorderLayout());
		setContentPane(contentPane);
		// création des bouttons 
		JButton cancel = new JButton("cancel");
		JButton valider = new JButton("valider");

		// association des actions aux bouttons 
		cancel.addActionListener(new CancelListener());

		valider.addActionListener(new ValiderListener());

		// création de la toolbar contenant les boutons
		JToolBar toolbar = new JToolBar();
		toolbar.add(cancel);
		toolbar.add(valider);
		
		// permet de localiser la fenetre en bas.
		getContentPane().add(toolbar,BorderLayout.SOUTH);
		
		modelAtributePanel = new ModelAtributPanel(nodeElement.getAttributes());
		// on affecte les valeurs de notre élément en entrée à notre élément courant
		nodElement = nodeElement;

		getContentPane().add(modelAtributePanel,BorderLayout.CENTER);

		
	}

	class CancelListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			AtributeDialog.this.setVisible(false);
			AtributeDialog.this.dispose();
		}

	}
	
	class ValiderListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent arg0) {
			//Récupération de la list des attribus 
			List list = modelAtributePanel.getAtributList();
			
			// on efface tous les éléments contenu dans le Node element 
			nodElement.getAttributes().clear();
			// on affecte les nouvelles clés de valeur à notre élément
			nodElement.getAttributes().addAll(list);
			
			AtributeDialog.this.setVisible(false);
			AtributeDialog.this.dispose();
			
			CollieModelPanel.getCollieModelPanel().repaint();
			// Permet de réafficher les liaisons qui ont disparu 
			ColliePropertyPanel.getColliePropertyPanel().updateAndRepaint();			
		}
		
	}

}
